/*
 * 创建组件的脚本文件
 * */
import { FsFile } from "./utils/FsFile.js";
import { createJsTemplate, createScssTemplate, createVueTemplate } from "./templates";
import { log } from "./utils/utils.js";
import { resolve } from "path";
import { dirname } from "node:path";
import { fileURLToPath } from "node:url";

const __filename = fileURLToPath(import.meta.url);
const __dirname = resolve(dirname(__filename), "../packages/components");

// 文件根目录
// 创建文件对象
const fsFile = new FsFile(__dirname);

// 需要创建的文件列表
const files = {
  ts: createJsTemplate,
  scss: createScssTemplate,
  vue: createVueTemplate,
};

function createFile(folderName) {
  const folderPath = fsFile.join(folderName);

  // 检查文件夹是否存在
  if (fsFile.isExists(folderPath)) {
    return log.error(`错误：文件夹 "${folderPath}" 已经存在。`);
  }

  // 创建文件夹路径
  fsFile.createFolder(folderPath);

  for (const ext in files) {
    // 创建文件路径
    const filePath = fsFile.join(folderPath, `${folderName}.${ext}`);
    const fileContent = files[ext](folderName);
    // 创建文件并写入内容
    fsFile.createFile(filePath, fileContent);
  }

  log.success(`组件 "${folderName}" 创建成功于目录 "${folderPath}" 中。`);
}

// 传入文件夹路径作为命令行参数
const folderName = process.argv[2];

// 检查输入参数是否存在
if (!folderName) {
  log.error("请提供文件夹路径、文件夹名称和文件内容作为参数。");
  process.exit(1);
}

// 调用函数创建文件
createFile(folderName);
